<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0">

  <xsl:output method="xml" omit-xml-declaration="yes"/>

  <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
  <!-- Templates de génération HTML                                                                                  -->
  <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->

  <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
  <!-- Génération du HTML pour un commentaire donné
       Dans ce template, le contexte est un commentaire (tag <cmm>)
    -->
  <xsl:template name="genHtmForCmm" >
    <xsl:param name="p_lgnCls"/>
    <tr>
      <xsl:attribute name="class"><xsl:value-of select="$p_lgnCls"/></xsl:attribute>
      <td>
        <xsl:value-of select="txt"/>
      </td>
      <td>
        <xsl:value-of select="nom"/>
      </td>
      <td>
        <xsl:value-of select="cmmTyp"/>
      </td>
      <td>
        <xsl:value-of select="cmmEtt"/>
      </td>
    </tr>
  </xsl:template>

  <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
  <!-- Génération du HTML pour une liste de commentaires
       Dans ce template, le contexte est une liste de commentaires (tag <cmmLst>)
    -->
  <xsl:template name="genHtmForCmmLst" >

    <h2>Commentaires</h2>

    <xsl:if test="count( cmm ) > 0" >

      <table class="tbl">
        <tr class="tblLgnHdr">
          <th>Texte</th>
          <th>Nom</th>
          <th>Type</th>
          <th>Etat</th>
        </tr>

          <xsl:for-each select="cmm">
            <xsl:call-template name="genHtmForCmm">
              <xsl:with-param name="p_lgnCls">
                <xsl:choose>
                  <xsl:when test="(position() mod 2) = 0">tblLgnPai</xsl:when>
                  <xsl:otherwise>tblLgnImp</xsl:otherwise>
                </xsl:choose>
              </xsl:with-param>
            </xsl:call-template>
          </xsl:for-each>

      </table>
    </xsl:if>

  </xsl:template>

  <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
  <!-- Génération du HTML pour une section donnée
       Dans ce template, le contexte est une section (tag <sct>)
    -->
  <xsl:template name="genHtmForSct" >
    <xsl:param name="p_lgnCls"/>

    <table class="tbl">

      <tr>
        <td class="tblHdrLft">Description</td>
        <td class="tblCllHdr"><xsl:value-of select="dscSct"/></td>
      </tr>
      <tr>
        <td class="tblHdrLft">Format</td>
        <td class="tblCllHdr"><xsl:value-of select="frm"/></td>
      </tr>
      <tr>
        <td class="tblHdrLft">Opérations autorisées</td>
        <td class="tblCllHdr"><xsl:value-of select="opeAut"/></td>
      </tr>
      <tr>
        <td class="tblHdrLft">Entité liée</td>
        <td class="tblCllHdr"><xsl:value-of select="ent"/></td>
      </tr>

    </table>

    <p></p>

    <xsl:if test="count( wdgLst/wdg ) > 0">

      <table class="tbl">
        <tr class="tblLgnHdr">
          <th>Nom</th>
          <th>Label</th>
          <th>Format</th>
          <th>Attribut</th>
        </tr>

        <xsl:for-each select="wdgLst/wdg">
          <xsl:call-template name="genHtmForWdg">
            <xsl:with-param name="p_lgnCls">
              <xsl:choose>
                <xsl:when test="(position() mod 2) = 0">tblLgnPai</xsl:when>
                <xsl:otherwise>tblLgnImp</xsl:otherwise>
              </xsl:choose>
            </xsl:with-param>
          </xsl:call-template>
        </xsl:for-each>

      </table>

    </xsl:if>

  </xsl:template>

  <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
  <!-- Génération du HTML pour une liste de sections
       Dans ce template, le contexte est une liste de sections (tag <sctLst>)
    -->
  <xsl:template name="genHtmForSctLst" >

    <xsl:if test="count( doc/sctLst/sct ) > 0" >

      <xsl:for-each select="doc/sctLst/sct">

        <h2>Section <xsl:value-of select="nom"/></h2>

          <xsl:call-template name="genHtmForSct">
            <xsl:with-param name="p_lgnCls">
              <xsl:choose>
                <xsl:when test="(position() mod 2) = 0">tblLgnPai</xsl:when>
                <xsl:otherwise>tblLgnImp</xsl:otherwise>
              </xsl:choose>
            </xsl:with-param>
          </xsl:call-template>

        </xsl:for-each>

    </xsl:if>

  </xsl:template>

  <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
  <!-- Génération du HTML pour un widget donné
       Dans ce template, le contexte est un widget (tag <wdgLst><wdg>)
    -->
  <xsl:template name="genHtmForWdg" >
    <xsl:param name="p_lgnCls"/>
    <tr>
      <xsl:attribute name="class"><xsl:value-of select="$p_lgnCls"/></xsl:attribute>
      <td>
        <xsl:value-of select="nom"/>
      </td>
      <td>
        <xsl:value-of select="lbl"/>
      </td>
      <td>
        <xsl:value-of select="frm"/>
      </td>
      <td>
        <xsl:value-of select="att/att/nom"/>
      </td>
    </tr>

    <!-- Les commentaires du widget -->
    <xsl:for-each select="cmmLst/cmm">
      <tr>
        <xsl:attribute name="class"><xsl:value-of select="$p_lgnCls"/></xsl:attribute>
        <td class="tblCll">
        </td>
        <td colspan="2"  class="tblCllPtt">
          <xsl:value-of select="txt"/>
        </td>
        <td  class="tblCllPtt">
          <xsl:value-of select="nom" />
        </td>
      </tr>
    </xsl:for-each>

  </xsl:template>

  <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->
  <!-- Templates de changement de contexte                                                                           -->
  <!-- ///////////////////////////////////////////////////////////////////////////////////////////////////////////// -->

  <xsl:template match="/">
    <!-- Rappel : Le HTML généré sera inséré dans une balise <div> -->
    <h1>Fiche détaillée de la page <xsl:value-of select="doc/ttr"/></h1>

    <xsl:if test="count( doc/pag ) > 0" >
      <table class="tbl">

        <tr>
          <th class="tblHdrLft">Nom</th>
          <td class="tblCllHdr"><xsl:value-of select="doc/pag/nom"/></td>
        </tr>
        <tr>
          <td class="tblHdrLft">Description</td>
          <td class="tblCllHdr"><xsl:value-of select="doc/pag/dscPag"/></td>
        </tr>
        <tr>
          <td class="tblHdrLft">Création</td>
          <td class="tblCllHdr"><xsl:value-of select="doc/pag/audit/datCre"/></td>
        </tr>
        <tr>
          <td class="tblHdrLft">Dern. màj</td>
          <td class="tblCllHdr"><xsl:value-of select="doc/pag/audit/datMaj"/></td>
        </tr>
      </table>

      <p></p>

      <!-- // Les sections de la page ////////////////////////////////////////////////////////////// -->
      <xsl:call-template name="genHtmForSctLst"/>

      <!-- // Les commentaires de la page ////////////////////////////////////////////////////////// -->
      <xsl:for-each select="doc/cmmLst">
        <xsl:sort select="nom"/>
        <xsl:call-template name="genHtmForCmmLst" />
      </xsl:for-each>

    </xsl:if>

  </xsl:template>

</xsl:stylesheet>